Complex Projection এবং Nested Queries হল LINQ কুয়েরি লেখার আরও উন্নত কৌশল, যা ডেটার বিভিন্ন দিক এবং সম্পর্কগুলি প্রক্রিয়া করতে সহায়ক। এগুলি বড় ডেটাসেটের মধ্যে প্যাটার্ন বা তথ্য বের করার জন্য শক্তিশালী টুলস হিসেবে কাজ করে। নিচে এগুলোর বিস্তারিত আলোচনা করা হলো।
Complex Projection হল LINQ কুয়েরি ব্যবহার করে ডেটার বিভিন্ন ফিল্ড বা প্রোপার্টি নির্বাচন করা, যেখানে সাধারণ Select অপারেশন ছাড়াও একাধিক প্রোপার্টি, সাব-অবজেক্ট বা কাস্টম অবজেক্ট ফিরিয়ে আনা হয়। এতে, ডেটার একটি বা একাধিক অংশকে কাস্টম অবজেক্টে রূপান্তরিত করা হয়, যা কমপ্লেক্স ডেটা রিটার্ন করে।
Complex Projection এর উদাহরণ:
ধরা যাক, আমাদের কাছে একটি Customer
ক্লাস রয়েছে যা Name, Address এবং Orders ফিল্ড ধারণ করে, যেখানে Orders একটি লিস্ট অব Order
অবজেক্ট।
public class Customer
{
public string Name { get; set; }
public string Address { get; set; }
public List<Order> Orders { get; set; }
}
public class Order
{
public int OrderID { get; set; }
public DateTime OrderDate { get; set; }
public decimal TotalAmount { get; set; }
}
এখন, আমরা যদি Customer ক্লাসের Name এবং TotalAmount যোগ করে কাস্টম অবজেক্ট তৈরি করতে চাই, তাহলে Complex Projection ব্যবহার করব।
List<Customer> customers = new List<Customer>
{
new Customer
{
Name = "Alice",
Address = "New York",
Orders = new List<Order>
{
new Order { OrderID = 1, OrderDate = DateTime.Now, TotalAmount = 100 },
new Order { OrderID = 2, OrderDate = DateTime.Now.AddDays(-1), TotalAmount = 200 }
}
},
new Customer
{
Name = "Bob",
Address = "Los Angeles",
Orders = new List<Order>
{
new Order { OrderID = 3, OrderDate = DateTime.Now.AddDays(-2), TotalAmount = 150 }
}
}
};
// Complex Projection: Customer Name এবং Total Order Amount নির্বাচন করা
var result = from customer in customers
select new
{
customer.Name,
TotalAmount = customer.Orders.Sum(order => order.TotalAmount)
};
foreach (var item in result)
{
Console.WriteLine($"{item.Name}: {item.TotalAmount}");
}
এখানে Select
এর মাধ্যমে আমরা Name এবং Orders এর TotalAmount এর যোগফলকে কাস্টম অবজেক্ট হিসেবে ফিরিয়ে দিয়েছি। এই কুয়েরি ফলস্বরূপ:
Alice: 300
Bob: 150
এটি Complex Projection এর একটি সহজ উদাহরণ, যেখানে Order অবজেক্টের মান ব্যবহার করে একটি নতুন প্রোপার্টি তৈরি করা হয়েছে।
Nested Queries হল এমন LINQ কুয়েরি যেখানে একটি কুয়েরি অন্য একটি কুয়েরির মধ্যে থাকে। সাধারণত, এক বা একাধিক কুয়েরি সাবকুয়েরি হিসেবে ব্যবহার করা হয়, যা প্রধান কুয়েরির ফলাফল তৈরি করতে সাহায্য করে। এটি সাধারণত যখন প্রয়োজন হয় ডেটার মধ্যে সম্পর্কের ভিত্তিতে নতুন ফলাফল তৈরি করতে, তখন ব্যবহার করা হয়।
Nested Queries এর উদাহরণ:
ধরা যাক, আমাদের কাছে Order
এবং Product
ক্লাস আছে, যেখানে প্রতিটি Order এর মধ্যে একাধিক Product থাকে। আমরা যদি এমন একটি কুয়েরি তৈরি করতে চাই, যা Customer অনুযায়ী প্রতিটি Order এর জন্য সর্বোচ্চ মোট অর্ডার মূল্য বের করবে, তাহলে Nested Query ব্যবহার করতে হবে।
public class Order
{
public int OrderID { get; set; }
public string CustomerName { get; set; }
public List<Product> Products { get; set; }
}
public class Product
{
public string ProductName { get; set; }
public decimal Price { get; set; }
}
List<Order> orders = new List<Order>
{
new Order
{
OrderID = 1,
CustomerName = "Alice",
Products = new List<Product>
{
new Product { ProductName = "Laptop", Price = 1000 },
new Product { ProductName = "Mouse", Price = 50 }
}
},
new Order
{
OrderID = 2,
CustomerName = "Bob",
Products = new List<Product>
{
new Product { ProductName = "Keyboard", Price = 75 },
new Product { ProductName = "Monitor", Price = 300 }
}
},
new Order
{
OrderID = 3,
CustomerName = "Alice",
Products = new List<Product>
{
new Product { ProductName = "Phone", Price = 500 },
new Product { ProductName = "Headphones", Price = 100 }
}
}
};
// Nested Query: প্রতিটি Order এর জন্য সর্বোচ্চ মূল্য বের করা
var result = from order in orders
group order by order.CustomerName into customerGroup
select new
{
Customer = customerGroup.Key,
MaxOrderAmount = (from product in customerGroup.SelectMany(order => order.Products)
select product.Price).Max()
};
foreach (var item in result)
{
Console.WriteLine($"{item.Customer}: {item.MaxOrderAmount}");
}
এখানে Nested Query এর মধ্যে SelectMany()
এবং একটি সাব-কুয়েরি ব্যবহার করা হয়েছে, যা Products থেকে সর্বোচ্চ Price বের করে। এই কুয়েরি ফলস্বরূপ:
Alice: 1000
Bob: 300
এটি একটি Nested Query এর উদাহরণ যেখানে এক কুয়েরি অন্য কুয়েরির ভিতরে ব্যবহার করা হয়েছে, এবং ডেটার একটি অংশকে আরও নির্দিষ্টভাবে প্রক্রিয়া করা হয়েছে।
common.read_more